package view;

import controller.Controleur;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import model.Model;
import observer.Observer;

/**
 * Classe representant la fenetre principal
 * @author Lefevre, Thoue
 */
public class Fenetre extends JFrame implements Observer{
    private ConnectFrame fConnec;
    private PanelPrincipal panelPrincipal;
    private PanelProfil panelProfil;
    private ParamFrame paramFrame;
    private ContactFrame contactFrame;
    private ChatPanel panelChat;
    private PanelCall panelCall;
    private BarMenu barMenu;
    private Controleur controleur;

    /**
     * Constructeur
     * @param controleur controleur de l'application
     */
    public Fenetre(Controleur controleur) {
        this.controleur = controleur;
        setVisible(false);
        setPreferredSize(new Dimension(1150,650));
        setTitle("eAudioChat");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        pack();
        setLocationRelativeTo(null);
        setResizable(false);
        barMenu = new BarMenu(this);
        this.setJMenuBar(barMenu);
        fConnec = new ConnectFrame(this);
        
        panelPrincipal = new PanelPrincipal();
        add(panelPrincipal,BorderLayout.CENTER);           
            
        panelProfil = new PanelProfil(controleur);
        panelPrincipal.add(panelProfil,BorderLayout.EAST);
        
        paramFrame= new ParamFrame(controleur);
        contactFrame = new ContactFrame(controleur);
        
        panelCall = new PanelCall(controleur);
        panelPrincipal.add(panelCall,BorderLayout.EAST);
     
        panelChat= new ChatPanel(controleur);
        panelPrincipal.add(panelChat,BorderLayout.WEST);
        
        controleur.loadContact();
        validate();
    }
    /**
     * Getter Controleur
     * @return le controleur de l'application
     */
    public Controleur getControleur() {     return controleur;    }
    /**
     * Getter ParamFrame
     * @return la fenetre de parametre du son
     */
    public ParamFrame getParamFrame() {   return paramFrame;    }
    /**
     * Getter ContactFrame
     * @return la fenetre d'ajout de contact
     */
    public ContactFrame getContactFrame() {   return contactFrame;    }
    
    /**
     * Methode de mise à jour de la vue
     * @param eaudio model a jour
     */
    @Override
    public void update(Model eaudio) {
        panelProfil.update(eaudio);
        panelCall.update(eaudio);
        paramFrame.update(eaudio);
        panelChat.update(eaudio);
        validate();
    }
}